home *** CD-ROM | disk | FTP | other *** search
/ Tech Arsenal 1 / Tech Arsenal (Arsenal Computer).ISO / tek-02 / htable.zip / TESTDEMO.PAS < prev   
Pascal/Delphi Source File  |  1993-01-04  |  3KB  |  116 lines

  1. Program TestDemo;  {Generic Hash Table Demonstration Program}
  2.  
  3. Uses Crt,DemoTab;
  4.  
  5. Const
  6.   Number     = 200;
  7.   LoadFactor = 4;
  8.  
  9. Type
  10.   KeyString = String[24];  {20 is the Maximum useable Key Length}
  11.                            {longer keys are truncated to 20}
  12.  
  13.   SaveArray = Array[1..Number] of KeyString;
  14.  
  15. Var
  16.   Table     : DemoTable;
  17.   I,J       : Word;
  18.   S         : KeyString;
  19.   R         : Demo;
  20.   Dupe      : Boolean;
  21.   Save      : SaveArray;
  22.   DupeCount : LongInt;
  23.  
  24. Function RandomKey : KeyString;
  25. Var
  26.   I : Byte;
  27.   J : Byte;
  28.   C : Char;
  29.   S : KeyString;
  30. Begin
  31.   S := '';
  32.   For I := 1 to SizeOf(KeyString)-1 do
  33.     Begin
  34.       C := ' ';
  35.       While (Ord(C) < Ord('A')) or (Ord(C) > Ord ('Z')) do
  36.         Begin
  37.           J := Random (256);
  38.           C := Chr(J)
  39.         End;
  40.       S := S + C
  41.   End;
  42.   RandomKey := S
  43. End;
  44.  
  45. Procedure RandomRec (Var Rec : Demo);
  46. Begin
  47.   Rec.Data := Random (MaxInt);
  48. End;
  49.  
  50. Begin
  51.   ClrScr;
  52.  
  53.   Randomize;
  54. {  RandSeed := 100; } {for testing Hashing Function Algorithms}
  55.  
  56.   DupeCount := 0;
  57.   WriteLn ('Before Table Creation, Memory Available = ',MemAvail);
  58.   Table.Create (Number,LoadFactor);
  59.   WriteLn ('After Table Creation, Memory Available = ',MemAvail);
  60.   For I := 1 to Number do
  61.     Begin
  62.       RandomRec (R);
  63.       GoToXY (1,9);
  64.       Save[I] := RandomKey;
  65.       Write (I:4,' Entering Key ',Save[I],' with random value ',R.Data,'      ');
  66.       Table.Enter (Save[I],R,Dupe);
  67.       If Dupe Then
  68.         DupeCount := DupeCount + 1
  69.     End;
  70.   GoToXY (1,3);
  71.   WriteLn ('After Table Loading, Memory Available = ',MemAvail);
  72.   WriteLn ('Table Contains ',Table.EntryCount:1,' Records');
  73.   WriteLn ('Encountered ',DupeCount:1,' Duplicate Keys');
  74.   WriteLn ('Table Allocated ',Table.StaticLength:1,' Buckets. Attempted Load Factor ',LoadFactor);
  75.   GoToXY (1,11);
  76.   Write ('Press <Return>/<Enter> to Continue...');
  77.   ReadLn;
  78.   For I := (Number Div 2) to Number do
  79.     Begin
  80.  
  81.       {***** NOTE: In real world, check Table.Member(Save[I]) first!!!}
  82.  
  83.       R.Data := MaxInt - I;
  84.       Table.UpDate (Save[I],R);
  85.       GoToXY (1,11);
  86.       Write (I:4,' UpDating Key ',Save[I],' with value ',R.Data,'      ')
  87.     End;
  88.   GoToXY (1,13);
  89.   Write ('Press <Return>/<Enter> to Continue...');
  90.   ReadLn;
  91.   For I := 1 to Number do
  92.     If Table.Member(Save[I]) Then
  93.       Begin
  94.         GoToXY (1,13);
  95.         Table.Retrieve (Save[I],R,Dupe);
  96.         Write (I:4,' Retrieving Key ',Save[I],'. Found value ',R.Data,'      ');
  97.       End;
  98.   WriteLn;
  99.   WriteLn;
  100.   Write ('Press <Return>/<Enter> to Continue...');
  101.   ReadLn;
  102.   Window (1,7,80,25);
  103.   ClrScr;
  104.   WriteLn ('Maximum Bucket Load          = ',Table.MaxLoad);
  105.   WriteLn ('Total Number of Buckets Used = ',Table.Buckets_In_Use);
  106.   WriteLn ('Index of Last Bucket Used    = ',Table.LastBucket);
  107.   WriteLn ('Hash Table Load Factor       = ',Table.AverageLoad:4:8);
  108.   Window (1,11,80,25);
  109.   Table.Distribution_Report;
  110.   WriteLn;
  111.   WriteLn ('DESTROYING TABLE!  Please Wait...');
  112.   Table.Destroy;
  113.   Write ('After Table Destruction, Memory Available = ',MemAvail);
  114.   ReadLn;
  115.   Window (1,1,80,25)
  116. End.